package com.mjf.scala.chapter02

/**
 * 变量和常量
 *
 * -变量：在程序执行的过程中，值可以改变
 * -常量：在程序执行的过程中，值不可以改变
 * -Java
 *    >变量：数据类型 变量名 = 值（int a = 10）
 *    >常量：final 数据类型 变量名 = 值（final int a = 10）
 * -Scala
 *    >变量：var 变量名:数据类型 = 值（var a:Int = 10）
 *    >变量：val 变量名:数据类型 = 值（val a:Int = 10）
 */
object Scala02_Var {

  def main(args: Array[String]): Unit = {

    // （1）声明变量时，类型可以省略，编译器自动推导，即类型推导
    var a = 10  // var a:Int = 10
    println(a)

    // （2）类型确定后，就不能修改，说明Scala是强数据类型语言。
//    a = "abc"

    // （3）变量声明时，必须要有初始值
//    var b:Int

    // （4）在声明/定义一个变量时，可以使用var或者val来修饰，var修饰的变量可改变，val修饰的变量不可改
    val x = 20
//    val x = 30
    println(x)

    // （5）var修饰的对象引用可以改变，val修饰的对象则不可改变，但对象的状态（值）却是可以改变的。（比如：自定义对象、数组、集合等等）
    var std1 = new Student()
    std1 = new Student()

    val std2 = new Student()
    std2.name = "lisi"
//    std2 = new Student()

    // （6）在实际开发的过程中，var和val优先选谁?
//    val

  }

}

class Student{
  var name:String = "zhangsan"
}